﻿

@model Vizzio.Models.IngresoDeProducto

@{
    ViewBag.Title = "Recepcionar";
}

<h2>Recepcionar Productos</h2>


@using (Html.BeginForm("Recepcionar","IngresoDeProducto"))
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>Datos del Ingreso de Producto</h4>
        <hr />
        @Html.ValidationSummary(true)
        @Html.HiddenFor(model => model.IngresoDeProductoID)


        <div class="control-group form-group">
            @Html.LabelFor(model => model.CodigoDeIngresoDeProducto, new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.TextBoxFor(model => model.CodigoDeIngresoDeProducto, new { @class = "form-control", @readonly = "", required = "", data_validation_required_message = "Campo requerido", maxlength = "30", data_validation_maxlength_message = "Muy largo: Ingrese 30 o menos caracteres", minlength = "1", data_validation_minlength_message = "Muy corto: Ingrese al menos 1 caracter", data_validation_regex_regex = "[A-ZñÑa-z0-9_\\-\\.,#\\/ ]+", data_validation_regex_message = "Solo caracteres Alfanumericos incluido [-_.,_/#]" })
                <p class="help-block">1 a 30 Caracteres Alfanumericos</p>
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(model => model.Descripcion, new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.TextAreaFor(model => model.Descripcion, new { @class = "form-control", @readonly = "", maxlength = "500", data_validation_maxlength_message = "Muy largo: Ingrese 500 o menos caracteres" })
                <p class="help-block">Maximo 500 Caracteres</p>
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(model => model.Fecha, new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.TextBoxFor(model => model.Fecha, Model.Fecha.ToShortDateString(), new { @class = "form-control", @readonly = "" })
            </div>
        </div>
        <hr />
        <h4>Detalle de Productos</h4>
        <div class="row">
            <div class="col-md-12">
                <table class="table table-bordered">
                    <thead>
                        <tr class="info">
                            <th class="col-lg-2">Producto</th>
                            <th class="col-lg-2">Presentacion</th>
                            <th class="col-lg-2">Socio</th>
                            <th class="col-lg-2">Cantidad Esperada</th>
                            <th class="col-lg-1">* Cantidad Recibida</th>
                            <th class="col-lg-2">Cant. Total</th>
                            <th class="col-lg-2">Precio Unitario de Compra</th>
                        </tr>
                    </thead>
                    <tbody class="productos">
                        @{int contadorDeProductosEsperados = 0;
                          int contadorProductosDeSocio = 0;
                        }
                        @foreach (var productoEsperado in Model.ProductosEsperados)
                        {
                            
                            string rowspan = productoEsperado.ProductosDeSocio.Count().ToString();
                            int idUltimoProducto = -1;
                            
                            foreach (var productoDeSocio in productoEsperado.ProductosDeSocio)
                            {
                                
                                if (productoDeSocio.ProductoID == idUltimoProducto)
                                {
                                    //Significa que es del mismo grupo
                                    <tr>
                                        <td><div class='control-group'><div class='controls'><em>@productoDeSocio.Socio.Nombre @productoDeSocio.Socio.Apellidos</em><input type='text' hidden name='ProductoDeSocio[@contadorProductosDeSocio].ProductoDeSocioID' value=@productoDeSocio.ProductoDeSocioID /></div></div></td>
                                        <td><div class='control-group'><div class='controls'><em>@productoDeSocio.CantidadEsperada</em></div></div></td>
                                        <td><div class='control-group'><div class='controls'><input class="cantidad_ingresada" type='text' name='ProductoDeSocio[@contadorProductosDeSocio].CantidadIngresada' required maxlength="10" value=@productoDeSocio.CantidadEsperada /></div></div></td>
                                    </tr>
                                }
                                else
                                {
                                    //Nuevo grupo
                                    idUltimoProducto = productoEsperado.ProductoID;
                                    <tr class="nuevo_producto">
                                        <td rowspan=@rowspan><div class='control-group'><div class='controls'><em>@productoEsperado.Producto.Nombre</em> <input type='text' hidden name='ProductoEsperado[@contadorDeProductosEsperados].ProductoEsperadoID' value=@productoEsperado.ProductoEsperadoID /></div></div></td>
                                        <td rowspan=@rowspan><div class='control-group'><div class='controls'><em>@productoEsperado.Producto.Presentacion.NombrePresentacion</em><input type='text' hidden name='ProductoDeSocio[@contadorProductosDeSocio].ProductoDeSocioID' value=@productoDeSocio.ProductoDeSocioID /></div></div></td>
                                        <td><div class='control-group'><div class='controls'><em>@productoDeSocio.Socio.Nombre @productoDeSocio.Socio.Apellidos</em></div></div></td>
                                        <td><div class='control-group'><div class='controls'><em>@productoDeSocio.CantidadEsperada</em></div></div></td>
                                        <td><div class='control-group'><div class='controls'><input class="cantidad_ingresada" type='text' name='ProductoDeSocio[@contadorProductosDeSocio].CantidadIngresada' required maxlength="10" value=@productoDeSocio.CantidadEsperada /></div></div></td>
                                        <td rowspan=@rowspan><div class='control-group'><div class='controls'><em class="cantidad_sub_total_ingresada"></em><input class="cantidad_sub_total_ingresada" type='text' hidden name='ProductoEsperado[@contadorDeProductosEsperados].CantidadRecibida'  /></div></div></td>
                                        <td rowspan=@rowspan><div class='control-group'><div class='controls'><em>@productoEsperado.PrecioUnitarioDeCompra</em></div></div></td>
                                    </tr>
                                    contadorDeProductosEsperados++;
                                }
                                contadorProductosDeSocio++;
                            }
                        }

                    </tbody>
                </table>
            </div>
        </div>

        <hr />
        <div class="form-group row">
            <div class="col-lg-offset-1 col-lg-3">
                <button type="submit" class="btn btn-primary">
                    <span class="glyphicon glyphicon-ok"></span> Confirmar Productos
                </button>
            </div>
            <div class="col-lg-offset-1 col-lg-3">
                <a href="@Url.Action("Index", "Importacion")" class="btn btn-primary">
                    <span class="glyphicon glyphicon-remove"></span> Cancelar
                </a>
            </div>
        </div>
    </div>
}

@*<div>
    @Html.ActionLink("Cancelar", "Index", null, new { @class = "btn btn-success" })
</div>*@

@section Scripts {
    <script>
        $(function () { $("input,select,textarea").not("[type=submit]").jqBootstrapValidation(); });
        calcular_totales();
        $(".cantidad_ingresada").change(function (event) {
            //if (parseInt($(this).val()) == 0)
            //    $(this).val('');
            calcular_totales();
        });

        $(".cantidad_ingresada").keydown(function (event) {
            //alert(e.keyChar);
            if (event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9) {
                // let it happen, don't do anything
            }
            else {
                if ((event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105)) {
                    event.preventDefault();
                }
            }
        });

        function calcular_totales()
        {
            var tr_list = $("tbody > tr");
            var ultimo_tr = null;
            var cantidad_productos = 0;
            $(tr_list).each(function () {
                
                if ($(this).hasClass('nuevo_producto')) {
                    //alert("ok1");
                    ultimo_tr = $(this);
                    cantidad_productos = parseInt((ultimo_tr.find("input.cantidad_ingresada")).val());
                }
                else
                {
                    //alert("ok2");
                    cantidad_productos = cantidad_productos + parseInt(($(this).find("input.cantidad_ingresada")).val());
                }
                if ($(this).nextAll("tr").first().length <= 0 || $(this).nextAll("tr").first().hasClass('nuevo_producto'))
                {
                    //alert("ok3");
                    //Significa que es el ultimo o el ultimo de su grupo
                    ultimo_tr.find('input.cantidad_sub_total_ingresada').val(cantidad_productos);
                    ultimo_tr.find('em.cantidad_sub_total_ingresada').text(cantidad_productos);
                    cantidad_productos = 0;
                }
                
            });
        }

    </script>

    <script type="text/javascript">
        var listaDeProductos;
        contador_productos = 0;
        $(document).ready(function () {
            //Recuperamos todos los productos de la base de datos
            $.ajax({
                type: "POST",

                // lugar donde se aloja nuestro web service
                url: "http://localhost:6490/Service/WebServiceGetProductos.asmx/ObtenerProductos",
                dataType: "json",
                data: "{}",
                contentType: "application/json; charset=utf-8",
                success: function (data) {
                    //alert("paso algo");

                    listaDeProductos = JSON.parse(data.d);
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    alert(textStatus + " Error: " + XMLHttpRequest.statusText);
                }
            });
        });

        //---------------------------------------------------Activa la validacion de los campos (Cargados estaticamente) ----------------------------------------//
        $(function () { $("input,select,textarea").not("[type=submit]").jqBootstrapValidation(); });

        //-------------------------- Funcion que agrega un nuevo producto cuando se hace clic en el boton + ------------------------------//
        $("a.add_producto").click(function () {
            //var contador_productos = parseInt($(".contador_productos").val());
            name = "productos[" + contador_productos + "]";

            var selectList = "<select name='" + name + ".ProductoID' class='combobox" + contador_productos + " productoSeleccionado' required><option></option>";
            $.each(listaDeProductos, function (index, producto) {
                selectList += "<option value='" + producto.ProductoID + "'>" + producto.Nombre + "</option>";
                //alert("key: " + producto.ProductoID + " vlaue: " + producto.Nombre);
            });
            selectList += "</select>";

            //$(jQuery.parseHTML(selectList)).combobox();
            //$('#my-container').html(selectList);
            var nuevo_producto = "<tr class='nuevo_producto'>"
                                    + "<td><div class='control-group'><div class='controls'>" + selectList + "</div></div></td>"
                                    + "<td><div class='control-group'><div class='controls'><input type='number' class='form-control cantidad' name='" + name + ".Cantidad' data-validation-number-message='Solo numeros enteros' required data-validation-required-message='Campo requerido' min='1' data-validation-min-message='Debe ser mayor a cero' maxlength='6' data-validation-maxlength-message='Muy grande. Maximo 6 digitos' data-validation-regex-regex='[0-9]+' data-validation-regex-message='Debe ingresar un entero positivo' placeholder='Cantidad'/><p class='help-block'></p></div></div></td>"
                                    + "<td><div class='control-group'><div class='controls'><input type='text' class='form-control precio' name='" + name + ".PrecioCompra' required data-validation-required-message='Campo requerido' min='1' data-validation-min-message='Debe ser mayor a cero' maxlength='8' data-validation-maxlength-message='Muy grande. Maximo 8 caracteres' data-validation-regex-regex='([0-9]+|[0-9]+,[0-9]+)' data-validation-regex-message='Solo valores decimales. Separador decimal( , )' placeholder='Precio de Compra'/></div></div></td>"
                                    + "<td><div class='control-group'><div class='controls'><input type='text' class='hidden' name='" + name + ".Eliminado' value='0'/>" + "<input type='text' class='form-control noLote' name='" + name + ".NoLote' data-validation-number-message='Solo numeros enteros' required data-validation-required-message='Campo requerido' maxlength='20' data-validation-maxlength-message='Muy grande. Maximo 20 digitos'/></div></div></td>"
                                    + "<td><a href='#' class='delete_producto' onclick='delete_producto(this)'><img class='img-circle' width='40' src='/Content/Images/minus.png' title='Quitar Producto' /></a></td>"
                                    + "</tr>";
            //Agregamos nueva fila a la tabla de productos
            $(this).closest(".row").find(".productos").append(nuevo_producto);
            //Activamos el combobox para que sea un autocomplete selectbox
            $(("select.combobox" + contador_productos)).combobox();
            //Incrementamos el index de los productos que seran enviados en el metodo post
            contador_productos = contador_productos + 1;
            //Activamos la validacion para los inputs agregados en tiempo de ejecucion
            $(function () { $("input,select,textarea").not("[type=submit]").jqBootstrapValidation(); });
        });


        //---------------------Funcion que elimina(Oculta y cambia el estado) un producto de la lista de productos importados --------------------------//
        function delete_producto(elemento) {
            var fila = $(elemento).closest("tr.nuevo_producto");
            //Marcamos el producto con -1 para que no sea guardado en la base de datos
            fila.find(".hidden").attr('value', -1);
            //Eliminamos los campos que debian validarse
            fila.find(".productoSeleccionado").remove();
            fila.find(".cantidad").remove();
            fila.find(".precio").remove();
            fila.find(".noLote").remove();

            //Ocultamos el resto de los campos.
            fila.hide();
        };



    </script>
    @Scripts.Render("~/bundles/jqueryval")
}
